/*
 * t1
 * t2
 * w1
 * w2
 * v(w1)
 * v(w2)
 * n1
 * n2
 * nq1
 * nq2
 *
 */

#include "fila.cpp"
#include "controle.cpp"
#include "servidor.cpp"
#include "estatistica.cpp"
#include <iostream>

using namespace std;

#define MI 1.0


void simulacao(float);

int main (void){
    float lambda;



    cout<<"Digite um valor de lambda: ";
    cin>>lamda;
    simulacao(lambda);

}

void simulacao(float lambda)
{
    Filas filas(lambda);
	Servidor servidor(MI);
	Controle controle;
	double tempoAtual = 0;
	ofstream myfile;
	Estatistica &estatistica = controle.getEstatistica();
	filas.geraIndividuos(); // gera primeiro Individuo
	while(true)
	{
		tempoAtual = controle.atualizaSistema(filas, servidor, tempoAtual);

		if(controle.fimFaseTransiente())
		{
			controle.comecarNovaRodada(tempoAtual);
			controle.setFimFaseTransiente(false);
		}
		if(servidor.getAtualizarRo())
		{
			servidor.atualizarRo(tempoAtual);
		}

		/*
		cout << "tempo: "<< tempoAtual << endl;
		cout << "Fila1: "<< filas.sizeFila1() << endl;
		cout << "Fila2: "<< filas.sizeFila2() << endl;
		cout<< "Servidor: " << servidor.getStatus()<<endl;
		cout<<"Utilizacao: " << servidor.getRo(tempoAtual)<<endl<< endl;
		//*/

		/*
		 ofstream myfile;
		 myfile.open ("leopoldo.txt", ios::app);
		 myfile << "tempo: "<< tempoAtual << endl;
		 myfile << "Fila1: "<< filas.sizeFila1() << endl;
		 myfile << "Fila2: "<< filas.sizeFila2() << endl;
		 myfile << "Servidor: " << servidor.getStatus()<<endl;
		 myfile <<"Utilizacao: " << servidor.getRo(tempoAtual)<<endl<< endl;
		 myfile.close();
		//*/

		if (controle.getRodadaAtual() > 1000) break;
		if(controle.getRodadaAtual() % 250 == 0)
		{
			cout<< controle.getRodadaAtual() << endl;
		}


	}


}
